home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / stdwin / Ports / mac / cursor.c < prev    next >
Text File  |  1995-12-21  |  3KB  |  134 lines

  1. /* MAC STDWIN -- MOUSE CURSORS. */
  2.  
  3. /* XXX Shouldn't named resources override the defaults? */
  4.  
  5. #include "macwin.h"
  6. #include <ToolUtils.h>
  7. #include <Resources.h>
  8.  
  9. extern CursPtr handcursorptr;
  10.  
  11. /* Fetch a cursor by name.  This really returns a resource handle,
  12.    cast to the mythical type CURSOR *.
  13.    If no resource by that name exists, some standard cursors may
  14.    be returned. */
  15.  
  16. CURSOR *
  17. wfetchcursor(name)
  18.     char *name;
  19. {
  20.     CursHandle h = (CursHandle) GetNamedResource('CURS', PSTRING(name));
  21.     if (h == NULL) {
  22.         if (strcmp(name, "ibeam") == 0)
  23.             h = GetCursor(iBeamCursor);
  24.         else if (strcmp(name, "cross") == 0)
  25.             h = GetCursor(crossCursor);
  26.         else if (strcmp(name, "plus") == 0)
  27.             h = GetCursor(plusCursor);
  28.         else if (strcmp(name, "watch") == 0)
  29.             h = GetCursor(watchCursor);
  30. #if 0 /* XXX */
  31.         else if (strcmp(name, "arrow") == 0) {
  32.             /* The arrow is only a quickdraw global,
  33.                which we can't use.
  34.                Should have it as a static variable... */
  35.             static CursPtr arrowptr;
  36.             arrowptr = &QD(arrow);
  37.             h = &arrowptr;
  38.         }
  39. #endif
  40.         else if (strcmp(name, "hand") == 0) {
  41.             /* The hand is hardcoded below */
  42.             h = &handcursorptr;
  43.         }
  44.     }
  45.     return (CURSOR *)h;
  46. }
  47.  
  48. void
  49. wsetwincursor(win, cursor)
  50.     WINDOW *win;
  51.     CURSOR *cursor;
  52. {
  53.     win->cursor = cursor;
  54.     if (win == active)
  55.         set_applcursor();
  56. }
  57.  
  58. /* Set the mouse cursor shape to the standard arrow.
  59.    This shape is used when the program is ready for input without
  60.    having the active window. */
  61.  
  62. void
  63. set_arrow()
  64. {
  65.     InitCursor();
  66. }
  67.  
  68. /* Set the mouse cursor shape to the standard watch.
  69.    This shape is used when a long task is being performed.
  70.    In practice always between two calls to wgetevent()
  71.    except when the mouse is down.
  72.    Note: this call is ignored when the application has
  73.    specified a cursor for the window; in this case it
  74.    is up to the application to set an arrow when it goes
  75.    away for a long time. */
  76.  
  77. void
  78. set_watch()
  79. {
  80.     if (active == NULL || active->cursor == NULL)
  81.         SetCursor(*GetCursor(watchCursor));
  82. }
  83.  
  84. /* Set the cursor to the standard cursor for the active window.
  85.    If there is no active window, use an arrow.
  86.    If a cursor is specified for the active window, use that,
  87.    otherwise use a default.
  88.    The default is normally a crosshair but can be changed by
  89.    setting the global variable _w_cursor to a cursor ID. */
  90.  
  91. int _w_cursor= crossCursor;
  92.  
  93. void
  94. set_applcursor()
  95. {
  96.     if (active == NULL)
  97.         set_arrow();
  98.     else if (active->cursor == NULL)
  99.         SetCursor(*GetCursor(_w_cursor));
  100.     else {
  101.         CursHandle h = (CursHandle) active->cursor;
  102.         if (*h == NULL)
  103.             LoadResource((Handle)h);
  104.         SetCursor(*h);
  105.     }
  106. }
  107.  
  108. /* Set the mouse cursor shape to a little hand icon.
  109.    This shape is used when scroll-dragging the document. */
  110.  
  111. static Cursor handcursor= {
  112.     {    /* Data: */
  113.         0x0180, 0x1a70, 0x2648, 0x264a, 
  114.         0x124d, 0x1249, 0x6809, 0x9801, 
  115.         0x8802, 0x4002, 0x2002, 0x2004, 
  116.         0x1004, 0x0808, 0x0408, 0x0408,
  117.     },
  118.     {    /* Mask: */
  119.         0x0180, 0x1bf0, 0x3ff8, 0x3ffa, 
  120.         0x1fff, 0x1fff, 0x7fff, 0xffff, 
  121.         0xfffe, 0x7ffe, 0x3ffe, 0x3ffc, 
  122.         0x1ffc, 0x0ff8, 0x07f8, 0x07f8,
  123.     },
  124.     {8, 8}    /* Hotspot */
  125. };
  126.  
  127. static CursPtr handcursorptr = &handcursor; /* For wfetchcursor */
  128.  
  129. void
  130. set_hand()
  131. {
  132.     SetCursor(&handcursor);
  133. }
  134.